package com.shuyuansystem.dao;

import com.shuyuansystem.pojo.CheckOrders;
import com.shuyuansystem.pojo.ShoppingCart;
import com.shuyuansystem.utils.QueryPageBean;
import org.apache.ibatis.annotations.Mapper;

import java.math.BigDecimal;
import java.util.List;
import java.util.Map;

@Mapper
public interface OrderMapper {
    /**
     * 插入购物车信息
     */
    void addShoppingcart(ShoppingCart shoppingCart);

    /**
     * 根据用户 ID 和商品 ID 获取购物车记录
     */
    ShoppingCart getShoppingCartItem(ShoppingCart shoppingCart);

    /**
     * 更新购物车记录的数量
     */
    void updateShoppingCartQuantity(ShoppingCart shoppingCart);

    /**
     * 删除购物车记录
     */
    void deleteShoppingCartItem(ShoppingCart shoppingCart);

    /**
     * 根据用户 ID 获取购物车中产品 ID 和数量信息
     */
    List<ShoppingCart> getProductIdAndQuantityById(String id);

    /**
     * 根据产品 ID 获取产品价格
     */
    BigDecimal getProductPriceById(String productId);

    /**
     * 根据产品 ID 列表获取商家 - 产品关联信息
     */
    List<Map<String, Object>> getMerchantProductAssociationByProductIds(List<Integer> productIds);

    /**
     * 插入订单信息
     */
    int insertOrder(Map<String, Object> orderInfo);

    /**
     * 检查订单是否存在
     */
    boolean checkOrderExists(Map<String, Object> orderInfo);

    /**
     * 插入订单列表信息
     */
    int insertOrderList(List<CheckOrders> checkOrdersList);

    /**
     * 检查订单记录是否存在
     */
    boolean checkCheckOrdersExists(CheckOrders checkOrders);

    /**
     * 分页查询商品信息
     */
    List<ShoppingCart> getProductInfoByPage(QueryPageBean queryPageBean);

    /**
     * 获取商品信息的总记录数
     */
    Long getTotalProductInfoCount();

    /**
     * 检查订单记录是否存在，只检查 user_id, merchant_id, product_name
     */
    boolean checkCheckOrdersExistsByUserMerchantProduct(CheckOrders checkOrders);

    /**
     * 更新订单记录的 quantity 和 total_price
     */
    void updateCheckOrders(CheckOrders checkOrders);

    /**
     * 根据用户 ID 获取用户所有订单
     */
    List<CheckOrders> getOrdersByUserId(String userId);

    /**
     * 删除订单记录
     */
    void deleteOrder(CheckOrders order);

    /**
     * 根据商品名称获取商品 ID
     */
    Integer getProductIdByName(String productName);

    // 新增方法：根据产品 ID 列表查询对应的商家 ID
    List<Map<String, Object>> getMerchantIdsByProductIds(List<Integer> productIds);
    // 新增方法：根据产品 ID 列表查询对应的产品名称
    List<Map<String, Object>> getProductNamesByProductIds(List<Integer> productIds);
    /**
     * 获取 order_list 表中所有的商家 ID 及对应的商品名称
     * @return 包含商家 ID 和商品名称的 Map 列表
     */
    List<Map<String, Object>> getMerchantIdAndProductNameFromOrderList();
    /**
     * 根据商家 ID 和商品名称删除订单表中的记录
     * @param deleteList 包含商家 ID 和商品名称的 Map 列表
     * @return 删除的记录数
     */
    int deleteOrdersByMerchantAndProduct(List<Map<String, Object>> deleteList);

    boolean checkMerchantOrderNumberEmpty(String user_id);
    // 检查指定 user_id、merchant_id、product_name 且 merchant_order_number 为空的记录是否存在
    boolean checkOrderExists(CheckOrders checkOrders);

}